/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.general.be;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
//import javax.persistence.NamedQueries;
//import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 *
 * @author lizardo
 */
@Entity
@Table(name = "gen_menu")
//@NamedQueries({@NamedQuery(name = "Menu.findAll", query = "SELECT m FROM Menu m"), @NamedQuery(name = "Menu.findByMenCodigo", query = "SELECT m FROM Menu m WHERE m.menCodigo = :menCodigo"), @NamedQuery(name = "Menu.findByMenNombre", query = "SELECT m FROM Menu m WHERE m.menNombre = :menNombre"), @NamedQuery(name = "Menu.findByMenActivo", query = "SELECT m FROM Menu m WHERE m.menActivo = :menActivo"), @NamedQuery(name = "Menu.findByMenrutaPagina", query = "SELECT m FROM Menu m WHERE m.menrutaPagina = :menrutaPagina"), @NamedQuery(name = "Menu.findByMenOrden", query = "SELECT m FROM Menu m WHERE m.menOrden = :menOrden")})
public class Menu implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "men_codigo")
    private Integer menCodigo;
    @Basic(optional = false)
    @Column(name = "men_nombre")
    private String menNombre;
    @Basic(optional = false)
    @Column(name = "men_activo")
    private boolean menActivo;
    @Column(name = "men_rutaPagina")
    private String menrutaPagina;
    @Basic(optional = false)
    @Column(name = "men_orden")
    private Integer menOrden;
    @Column(name = "men_descripcion")
    private String menDescripcion;
//   @JoinColumn(name = "smu_codigo", referencedColumnName = "men_codigo")
//    @ManyToOne(optional = false, fetch = FetchType.LAZY)
//    private List<Menu> menuCollection;
    @JoinColumn(name = "smu_codigo", referencedColumnName = "men_codigo")
    @ManyToOne(fetch = FetchType.LAZY)
    private Menu fkMenCodigoPadre;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkMenCodigoPadre", fetch = FetchType.LAZY)
    private List<Menu> menuList;
    @JoinColumn(name = "mod_codigo", referencedColumnName = "mod_codigo")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Modulo modCodigo;

    public Menu() {
    }

    public Menu(Integer menCodigo) {
        this.menCodigo = menCodigo;
    }

    public Menu(Integer menCodigo, String menNombre, boolean menActivo, int menOrden) {
        this.menCodigo = menCodigo;
        this.menNombre = menNombre;
        this.menActivo = menActivo;
        this.menOrden = menOrden;
    }

    public Integer getMenCodigo() {
        return menCodigo;
    }

    public void setMenCodigo(Integer menCodigo) {
        this.menCodigo = menCodigo;
    }

    public String getMenNombre() {
        return menNombre;
    }

    public void setMenNombre(String menNombre) {
        this.menNombre = menNombre;
    }

    public boolean getMenActivo() {
        return menActivo;
    }

    public void setMenActivo(boolean menActivo) {
        this.menActivo = menActivo;
    }

    public String getMenrutaPagina() {
        return menrutaPagina;
    }
    public void setMenrutaPagina(String menrutaPagina) {
        this.menrutaPagina = menrutaPagina;
    }

    public Integer getMenOrden() {
        return menOrden;
    }
    public void setMenOrden(Integer menOrden) {
        this.menOrden = menOrden;
    }

    public String getMenDescripcion() {
        return menDescripcion;
    }
    public void setMenDescripcion(String menDescripcion) {
        this.menDescripcion = menDescripcion;
    }

//    public List<Menu> getMenuCollection() {
//        return menuCollection;
//    }
//
//    public void setMenuCollection(List<Menu> menuCollection) {
//        this.menuCollection = menuCollection;
//    }

    public Modulo getModCodigo() {
        return modCodigo;
    }

    public void setModCodigo(Modulo modCodigo) {
        this.modCodigo = modCodigo;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (menCodigo != null ? menCodigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Menu)) {
            return false;
        }
        Menu other = (Menu) object;
        if ((this.menCodigo == null && other.menCodigo != null) || (this.menCodigo != null && !this.menCodigo.equals(other.menCodigo))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "org.cip.esymons.general.be.Menu[menCodigo=" + menCodigo + "]";
    }

    /**
     * @return the fkMenCodigoPadre
     */
    public Menu getFkMenCodigoPadre() {
        return fkMenCodigoPadre;
    }

    /**
     * @param fkMenCodigoPadre the fkMenCodigoPadre to set
     */
    public void setFkMenCodigoPadre(Menu fkMenCodigoPadre) {
        this.fkMenCodigoPadre = fkMenCodigoPadre;
    }

    /**
     * @return the menuList
     */
    public List<Menu> getMenuList() {
        return menuList;
    }

    /**
     * @param menuList the menuList to set
     */
    public void setMenuList(List<Menu> menuList) {
        this.menuList = menuList;
    }

}
